package com.muyu.api.model.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;

/**
 * @ClassName: ApiStatus
 * @Author: Zirun.Xin
 * @Date: 2025/4/17 下午3:12
 * @Version: 1.0
 * @Description: API接口状态码枚举（标准+扩展）
 */
@Getter
@ToString
@AllArgsConstructor
public enum ApiStatusEnum {
    /*----------------------- 标准HTTP状态码 (RFC 7231) -----------------------*/
    // 2xx 成功
    SUCCESS(200, "请求成功"),
    CREATED(201, "资源创建成功"),
    ACCEPTED(202, "请求已接受处理"),
    NO_CONTENT(204, "请求成功无返回内容"),

    // 3xx 重定向
    MOVED_PERMANENTLY(301, "资源永久重定向"),
    FOUND(302, "资源临时重定向"),
    NOT_MODIFIED(304, "资源未修改"),

    // 4xx 客户端错误
    BAD_REQUEST(400, "请求参数错误"),
    UNAUTHORIZED(401, "未认证/登录过期"),
    FORBIDDEN(403, "无权限访问"),
    NOT_FOUND(404, "资源不存在"),
    METHOD_NOT_ALLOWED(405, "不支持的请求方法"),
    REQUEST_TIMEOUT(408, "请求超时"),
    CONFLICT(409, "资源状态冲突"),
    GONE(410, "资源已永久删除"),
    TOO_MANY_REQUESTS(429, "请求过于频繁"),

    // 5xx 服务端错误
    INTERNAL_ERROR(500, "服务器内部错误"),
    NOT_IMPLEMENTED(501, "功能未实现"),
    SERVICE_UNAVAILABLE(503, "服务不可用"),
    GATEWAY_TIMEOUT(504, "网关超时"),

    /*----------------------- 自定义业务状态码 (按模块划分) -----------------------*/
    // 通用业务错误 1000-1099
    BUSINESS_ERROR(1000, "业务异常"),
    DATA_VALIDATION_FAILED(1001, "数据验证失败"),
    DATA_NOT_EXIST(1002, "数据不存在"),
    DATA_ALREADY_EXISTS(1003, "数据已存在"),
    OPERATION_FAILED(1004, "操作失败"),
    DUPLICATE_OPERATION(1005, "重复操作"),
    ILLEGAL_OPERATION(1006, "非法操作"),
    STATUS_INVALID(1007, "状态无效"),

    // 模板相关 1100-1199
    TEMPLATE_EMPTY(1101, "模板不能为空"),
    TEMPLATE_INVALID(1102, "模板格式错误"),
    TEMPLATE_NOT_FOUND(1103, "模板不存在"),

    // 认证授权 1200-1299
    TOKEN_EXPIRED(1201, "令牌已过期"),
    TOKEN_INVALID(1202, "无效令牌"),
    ACCESS_DENIED(1203, "访问权限不足"),
    CREDENTIALS_INVALID(1204, "凭证无效"),
    LOGIN_REQUIRED(1205, "需要登录"),
    ACCOUNT_LOCKED(1206, "账号已锁定"),
    CAPTCHA_ERROR(1207, "验证码错误"),

    // 文件操作 1300-1399
    FILE_UPLOAD_FAILED(1301, "文件上传失败"),
    FILE_SIZE_EXCEEDED(1302, "文件大小超限"),
    FILE_TYPE_UNSUPPORTED(1303, "文件类型不支持"),
    FILE_NOT_FOUND(1304, "文件不存在"),

    // 第三方服务 1400-1499
    THIRD_PARTY_ERROR(1401, "第三方服务异常"),
    THIRD_PARTY_TIMEOUT(1402, "第三方服务超时"),
    API_CALL_LIMIT(1403, "接口调用次数超限"),

    // 系统配置 1500-1599
    CONFIG_ERROR(1501, "配置错误"),
    CONFIG_NOT_FOUND(1502, "配置项不存在");

    /**
     * 状态码数值
     */
    private final Integer code;

    /**
     * 状态描述信息
     */
    private final String desc;
}
